package com.dream.servlet;

import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 匠人码农
 * @date 2020/11/02 12:50
 * 概要：
 *     通过本类学习ServletContext类的相关知识点。
 *     1.ServletContext作用
 *       1.1 获取web.xml配置文件中上下文参数context-param.
 *       1.2 获取当前工程路径。格式:/工程路径.
 *       1.3 获取工程部署后在服务器硬盘的绝对路径.
 *       1.4 像map一样存取数据.
 *           1.4.1 存储数据：setAttribute("")
 *           1.4.2 获取数据：getAttribute("");
 *           1.4.3 删除数据：removeAttribute("")
 *     2.获取servletContext对象的两种方式。
 *       2.1 getServletConfig().getServletContext()
 *       2.2 getServletContext();
 *
 */

public class ContextServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ContextServlet类的doGet方法！");

        //1. 获取servletcontext对象
        //方式1
        //ServletContext servletContext = getServletConfig().getServletContext();

        //方式2
        //区别是：getServletContext（）方法在内部实现调用了getServletConfig().getServletContext()
        ServletContext servletContext = getServletContext();

        //获取userAdmin
        System.out.println("context-param的userAdmin = " + servletContext.getInitParameter("userAdmin"));

        //获取userRoot
        System.out.println("context-param的userRoot = " + servletContext.getInitParameter("userRoot"));

        //2. 获取当前工程路径
        System.out.println("当前工程路径：" + servletContext.getContextPath());

        //3. 获取工程部署后的服务器硬盘的绝对路径
        //"/"代表的是http://ip地址:端口号/工程路径
        System.out.println("服务器的绝对路径：" + servletContext.getRealPath("/"));

        //4. 像map一样存取数据。
        //数据存一次，只要不执行删除操作或者停止web工程，就可以在其他地方取得。
        //存数据
        servletContext.setAttribute("key1","value1");

        //取数据
        System.out.println("key1 = " + servletContext.getAttribute("key1"));

        //删除数据
        servletContext.removeAttribute("key1");
        System.out.println("删除后再确认key1 = " + servletContext.getAttribute("key1"));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ContextServlet类的doPost方法");
    }
}
